<html>
    <head>
        <title>Json</title>
    </head>
    <body>
        <script>
            // Json

                /*
                    ABP 提供了Json的抽象。拥有这样的抽象又一些好处：

                        ①、你可以编写独立于库的代码。因此，你可以用最少的代码更改来更改底层库。

                        ②、你可以使用ABP中定义的预定义转换器，而无需担心底层库的内部详细信息。

                    
                    Json序列化系统使用 "Volo.Abp.Json" NuGet包实现 （Volo.Abp.Json.SystemTextJson是默认实现）。
                    
                    大多数时候你不需要手动安装它，因为它已经被预先安装到了启动模板。


                */

                /*
                    一、序列化器服务  IJsonSerializer 服务接口

                            你可以注入IJsonSerializer并将其用于JSON操作。
                            
                            这是IJsonSerializer接口中的可用操作。

                                    public interface IJsonSerializer
                                    {
                                        string Serialize(object obj, bool camelCase = true, bool indented = false);  // 序列化方法
                                        T Deserialize<T>(string jsonString, bool camelCase = true);  // 反序列化
                                        object Deserialize(Type type, string jsonString, bool camelCase = true);
                                    }

                            用法：

                                    public class ProductManager
                                    {
                                        public IJsonSerializer JsonSerializer { get; }

                                        public ProductManager(IJsonSerializer jsonSerializer)
                                        {
                                            JsonSerializer = jsonSerializer;  // 注入序列化服务
                                        }

                                        public void SendRequest(Product product)
                                        {
                                            var json=  JsonSerializer.Serialize(product);  // 序列化
                                            // Left blank intentionally for demo purposes...
                                        }
                                    }
                */

                /*
                    二、配置 Configuration 

                            AbpJsonOptions类型为ABP中的JSON操作提供选项。

                            可配置属性：

                                    ①、InputDateTimeFormats（List<string>）：输入JSON日期的格式，空字符串表示默认格式。你可以提供多种格式来解析日期。

                                    ②、OutputDateTimeFormat（string）：输出json日期的格式，Null或空字符串表示默认格式。

                */

                /*
                    三、Sytem.Text.Json 库配置
 
                            1、AbpSystemTextJsonSerializerOptions

                                      JsonSerializerOptions（System.Text.Json.JsonSerializerOptions）：System.Text.Json库操作的全局选项。
                                      
                                      请参阅此处https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions?view=net-9.0

                            2、AbpSystemTextJsonSerializerModifiersOptions

                                      Modifiers(List<Action<JsonTypeInfo>>): 配置DefaultJsonTypeInfoResolver的修饰符。请参阅此处的以供参考
                */

                /*
                    四、Newtonsoft 

                            添加 "Volo. Abp.Json.Newtonsoft" 包并依赖于AbpJsonNewtonsoftModule来替换System Text Json。


                            ★、AbpNewtonsoftJsonSerializerOptions选项类
                                        
                                       JsonSerializerSettings（Newtonsoft.Json.JsonSerializerSettings）：Newtonsoft库操作的全局选项。
                                       
                                       请参阅此处 https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonSerializerSettings.htm
                */

                /*
                    五、在 asp.net 中配置 JSON选项

                            你可以通过配置JsonOptions或MvcNewtonsoftJsonOptions来更改ASP.NETCore中的JSON行为（如果你使用Newtonsoft.Json）
                            
                            JsonOptions：https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.jsonoptions?view=aspnetcore-9.0

                            MvcNewtonsoftJsonOptions：  https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.mvcnewtonsoftjsonoptions?view=aspnetcore-9.0
                */
        </script>
    </body>
</html>